{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.4/dist-packages/pandas/io/excel.py:626: UserWarning: Installed openpyxl is not supported at this time. Use >=1.6.1 and <2.0.0.\n",
      "  .format(openpyxl_compat.start_ver, openpyxl_compat.stop_ver))\n",
      "/usr/local/lib/python3.4/dist-packages/pandas/io/parsers.py:1130: DtypeWarning: Columns (3) have mixed types. Specify dtype option on import or set low_memory=False.\n",
      "  data = self._reader.read(nrows)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>...</th>\n",
       "      <th>1549</th>\n",
       "      <th>1550</th>\n",
       "      <th>1551</th>\n",
       "      <th>1552</th>\n",
       "      <th>1553</th>\n",
       "      <th>1554</th>\n",
       "      <th>1555</th>\n",
       "      <th>1556</th>\n",
       "      <th>1557</th>\n",
       "      <th>1558</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>  125</td>\n",
       "      <td>  125</td>\n",
       "      <td>    1.0</td>\n",
       "      <td> 1</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td>...</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>   57</td>\n",
       "      <td>  468</td>\n",
       "      <td> 8.2105</td>\n",
       "      <td> 1</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td>...</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>   33</td>\n",
       "      <td>  230</td>\n",
       "      <td> 6.9696</td>\n",
       "      <td> 1</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td>...</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>   60</td>\n",
       "      <td>  468</td>\n",
       "      <td>    7.8</td>\n",
       "      <td> 1</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td>...</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>   60</td>\n",
       "      <td>  468</td>\n",
       "      <td>    7.8</td>\n",
       "      <td> 1</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td>...</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 0</td>\n",
       "      <td> 1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 1559 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   0     1       2    3     4     5     6     7     8     9     ...   1549  \\\n",
       "0   125   125     1.0    1     0     0     0     0     0     0  ...      0   \n",
       "1    57   468  8.2105    1     0     0     0     0     0     0  ...      0   \n",
       "2    33   230  6.9696    1     0     0     0     0     0     0  ...      0   \n",
       "3    60   468     7.8    1     0     0     0     0     0     0  ...      0   \n",
       "4    60   468     7.8    1     0     0     0     0     0     0  ...      0   \n",
       "\n",
       "   1550  1551  1552  1553  1554  1555  1556  1557  1558  \n",
       "0     0     0     0     0     0     0     0     0     1  \n",
       "1     0     0     0     0     0     0     0     0     1  \n",
       "2     0     0     0     0     0     0     0     0     1  \n",
       "3     0     0     0     0     0     0     0     0     1  \n",
       "4     0     0     0     0     0     0     0     0     1  \n",
       "\n",
       "[5 rows x 1559 columns]"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "data_folder = os.path.join(os.path.expanduser(\"~\"), \"Data\")\n",
    "data_filename = os.path.join(data_folder, \"Ads\", \"ad.data\")\n",
    "\n",
    "def convert_number(x):\n",
    "    try:\n",
    "        return float(x)\n",
    "    except ValueError:\n",
    "        return np.nan\n",
    "\n",
    "from collections import defaultdict\n",
    "converters = defaultdict(convert_number)  #{i: convert_number for i in range(1558)}\n",
    "converters[1558] = lambda x: 1 if x.strip() == \"ad.\" else 0\n",
    "    \n",
    "ads = pd.read_csv(data_filename, header=None, converters=converters)\n",
    "#ads = ads.applymap(lambda x: np.nan if isinstance(x, str) and not x == \"ad.\" else x)\n",
    "#ads[[0, 1, 2]] = ads[[0, 1, 2]].astype(float)\n",
    "ads[:5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3279,)"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#ads = ads.astype(float).dropna()\n",
    "X = ads.drop(1558, axis=1).values\n",
    "y = ads[1558]\n",
    "X.shape\n",
    "y.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The average score is 0.9334\n"
     ]
    }
   ],
   "source": [
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.cross_validation import cross_val_score\n",
    "\n",
    "clf = DecisionTreeClassifier(random_state=14)\n",
    "scores = cross_val_score(clf, X, y, scoring='accuracy')\n",
    "print(\"The average score is {:.4f}\".format(np.mean(scores)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "from sklearn.decomposition import PCA\n",
    "pca = PCA(n_components=5)\n",
    "Xd = pca.fit_transform(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2359, 5)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Xd.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.854,  0.145,  0.001,  0.   ,  0.   ])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.set_printoptions(precision=3, suppress=True)\n",
    "pca.explained_variance_ratio_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.092, -0.995, -0.024, ..., -0.   , -0.   , -0.   ])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "pca.components_[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The average score from the reduced dataset is 0.9356\n"
     ]
    }
   ],
   "source": [
    "clf = DecisionTreeClassifier(random_state=14)\n",
    "scores_reduced = cross_val_score(clf, Xd, y, scoring='accuracy')\n",
    "print(\"The average score from the reduced dataset is {:.4f}\".format(np.mean(scores_reduced)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10f34d0b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "from matplotlib import pyplot as plt\n",
    "classes = set(y)\n",
    "colors = ['red', 'green']\n",
    "for cur_class, color in zip(classes, colors):\n",
    "    mask = (y == cur_class).values\n",
    "    plt.scatter(Xd[mask,0], Xd[mask,1], marker='o', color=color, label=int(cur_class))\n",
    "plt.legend()\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.4.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
